import numpy as np

"""
题目 1:温度数据分析
某城市一周的最高气温（℃）为 [28, 30, 29, 31, 32, 30, 29]。
- 计算平均气温、最高气温和最低气温。
- 找出气温超过 30℃( 的天数。
"""
temps = np.array([28, 30, 29, 31, 32, 30, 29])
print("温度数据：", temps)
print("平均温度：", '%.3f' % np.mean(temps))
print("最高温度：", np.max(temps))
print("最低温度：", np.min(temps))
print("气温超过 30℃( 的天数：", len(temps[temps > 30]))
print("气温超过 30℃( 的天数：", np.cumsum(np.where(temps > 30, 1, 0))[-1])
print("气温超过 30℃( 的天数：", np.count_nonzero(temps > 30))

"""
题目 2:学生成绩统计
某班级 5 名学生的数学成绩为[85, 90, 78, 92, 88]。
- 计算成绩的平均分、中位数和标准差。
- 将成绩转换为十分制(假设满分为10)。
"""

scores = np.array([85, 90, 78, 92, 88])
print("\n")
print("scores: ", scores)
print("平均分：", np.mean(scores))
print("中位数：", np.median(scores))
print("标准差：", '%.2f' % np.std(scores))
print("方差：", np.var(scores))
print("十分制表示：", scores / 10)

"""
题目 3:矩阵运算
给定矩阵 A=[[1, 2], [3, 4]]和 B=[[5, 6], [7, 8]]。
- 计算A+B和A*B(逐元素乘法)。
- 计算 A 和 B 的矩阵乘法(点积)。
"""
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
print("\n")
print("A=", a)
print("B=", b)
print("A + B = ", a + b)
print("A * B = ", a * b)
print("A . B = ", a @ b)

"""
题目 4:随机数据生成
生成一个（3，4）的随机整数数组，范围[0,10)。
- 计算每列的最大值和每行的最小值。
- 将数组中的所有奇数替换为-1。
"""
np.random.seed(0)
arr = np.random.randint(0, 10, (3, 4))
print("\n")
print("random arr: \n", arr)
print("每列的最大值：", np.max(arr, axis=0))
print("每行的最小值：", np.min(arr, axis=1))
print("所有奇数替换为-1：\n", np.where(arr % 2 == 1, -1, arr))
arr[arr % 2 == 1] = -1
print("所有奇数替换为-1：\n", arr)

"""
题目 5:数组变形
创建一个 1 到 12 的一维数组，并变换为(3, 4)的二维数组
- 计算每行的和与每列的平均值。
- 将数组展平为一维数组。
"""
arr = np.arange(1, 13)
print("\n")
print("arr: \n", arr)
arr = arr.reshape(3, 4)
print("reshape arr: \n", arr)
print("每行的和为: ", np.sum(arr, axis=1))
print("每列的平均值为: ", np.mean(arr, axis=0))
print("将数组展平为一维数组: ", np.reshape(arr, 12))

"""
题目 6:布尔索引
生成一个（5，5）的随机数组，范围[0,20)。
- 找出数组中大于10的元素。
- 将所有大于10的元素替换为0。
"""
np.random.seed(0)
arr = np.random.randint(0, 21, (5, 5))
print("\n")
print("arr: \n", arr)
print("数组中大于10的元素: ", arr[arr > 10])
arr[arr > 10] = 0
print("大于10的元素替换为0: \n", arr)

"""
题目 7:统计函数应用
某公司6个月的销售额(万元) 为 [120, 135, 110, 125, 130, 140]。
- 计算销售额的总和、均值、方差。
- 找出销售额最高的月份和最低的月份。
"""
sales = np.array([120, 135, 110, 125, 130, 140])
print("\n")
total = np.sum(sales)
avg = np.mean(sales)
var = np.var(sales)
print(f"销售额\n总和：{total} \n均值：{avg:.2f} \n方差：{var:.2f}")
max_month = np.argmax(sales) + 1
low_month = np.argmin(sales) + 1
print(f"销售额\n最高的月份：{max_month}\n最低的月份：{low_month}")


"""
题目 8:数组拼接
给定 A = [1, 2, 3] 和 B = [4, 5, 6]。
- 将 A 和 B 水平拼接为一个数组。
- 将 A 和 B 垂直拼接为一个数组。
"""
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
print("\n")
c = np.concatenate([a, b])
print("将 A 和 B 水平拼接为一个数组: \n", c)
print("将 A 和 B 垂直拼接为一个数组: \n", np.reshape(c, (2, 3)))


"""
题目 9:唯一值和排序
给定数组 [2, 1, 2, 3, 1, 4, 3]
- 找出数组中的唯一值并排序。
- 计算每个唯一值出现的次数。
"""
arr = np.array([2, 1, 2, 3, 1, 4, 3])
print("\n")
n_arr, counts = np.unique(arr, return_counts=True)
print(n_arr)
print(counts)





